#include "CoordinateTransformation.h"

/**
 * @brief 已知两点距离和其中一点的经纬度，求另一点的经纬度
 * @param dist  两点的欧式距离
 * @param lng   其中一点的经度
 * @param lat   其中一点的纬度
 * @param rpos  另一点相对该点的坐标
 * @return 另一点的经纬度
 */
static pair<double, double> getLngLat(double &dist, double &lng, double &lat, pair<double, double> &rpos) {		//根据距离计算经纬度
    double delta_lng = lng + dist * rpos.second / (111320 *cos(lat));
    double delta_lat = lat + dist * rpos.first / 110540;
    return {delta_lng, delta_lat};
}

/**
 * @brief 已知两点(point1, point2)经纬度，求point1相对于point2的相对坐标
 * @param lng1  point1的经度
 * @param lat1  point1的纬度
 * @param lng2  point2的经度
 * @param lat2  point2的纬度
 * @return point1相对于point2的相对坐标
 */
static pair<double, double> getAngleDist(double lng1, double lat1, double lng2, double lat2) {
    double dlng = lng1 - lng2;
    double dlat = lat1 - lat2;
    double x = abs(sin(dlng * PI/(2 * 180))*cos(lat1 * PI/180));
    double y = abs(sin(dlat * PI/(2 * 180)));
    double dx = 2*asin(x)*R / (dlng > 0 ? -1 : 1);
    double dy = 2*asin(y)*R / (dlat < 0 ? -1 : 1);
    return {dx, dy};
}
